Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Inviare parametri ad un evento
Forum - C# / VB.NET - [C#] Inviare parametri ad un evento

Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 20:02
Martedì, 18/08/2009
Salve :)
Stò creando un piccolo programmino e mi sono fermato su una cosa che potrei tranquillamente aggirare, ma che mi farebbe perdere tempo e spazo nel codice.
Allora, ho diverse picturebox (64 per la precisione) create grazie ad un semplice ciclo for che le alloca nella finestra e ci setta un'immagine dentro. Ora il mio problema però stà nella gestione degli eventi! Teoricamente dovrei fare ben 64 eventi e quindi 64 funzioni però dato che gli eventi avranno un contenuto quasi del tutto uguale, non ne vale la pena appesantire l'applicazione e il sorgente.
La prima cosa che mi è venuta in mente è stata una cosa che sicuramente non sarebbe funzionata, ma la posto ugualmente per farvi rendere conto di cosa stò parlando e di cosa ho bisogno:
Codice sorgente - presumibilmente C++

  1. ...
  2. for(int i=0;i<0x40;i++)
  3.     sprite[i].Click += new System.EventHandler(this.Test(i));
  4. ...
  5.  
  6.  
  7. public static void Test(int n){
  8.     sprite[i] // e qui ci metterò l'operazione da fare
  9. }




Come risolvere? :)

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 21:52
Martedì, 18/08/2009
Testo quotato

Postato originariamente da xeeynamo:
Codice sorgente - presumibilmente C++

  1. ...
  2. for(int i=0;i<0x40;i++)
  3.     sprite[i].Click += new System.EventHandler(this.Test(i));
  4. ...
  5.  
  6.  
  7. public static void Test(int n){
  8.     sprite[i] // e qui ci metterò l'operazione da fare
  9. }




Come risolvere? :)



Modifica così:
Codice sorgente - presumibilmente C++

  1. ...
  2. for(int i=0;i<0x40;i++)
  3.     sprite[i].Click += new System.EventHandler(this.Test);
  4. ...
  5.  
  6.  
  7. public static void Test(object sender, EventArgs e){
  8.     PictureBox sprite = (PictureBox)sender;
  9.     //e con sprite ci fai quello che vuoi
  10. }


PM Quote
Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 22:21
Martedì, 18/08/2009
Postato originariamente da manvb.net:

Modifica così:
Codice sorgente - presumibilmente C++

  1. ...
  2. for(int i=0;i<0x40;i++)
  3.     sprite[i].Click += new System.EventHandler(this.Test);
  4. ...
  5.  
  6.  
  7. public static void Test(object sender, EventArgs e){
  8.     PictureBox sprite = (PictureBox)sender;
  9.     //e con sprite ci fai quello che vuoi
  10. }



perfetto, ho preso spunto dal codice sorgente e ho fatto una cosa così:
Codice sorgente - presumibilmente C++

  1. ...
  2. for(int i=0;i<0x40;i++){
  3.     sprite[i].Click += new System.EventHandler(this.Test);
  4.     sprite[i].Name = i.ToString();
  5. }
  6. ...
  7.  
  8.  
  9. public static void Test(object sender, EventArgs e){
  10.     PictureBox sprite = (PictureBox)sender;
  11.     sprite[Int32.Parse(p.Name)] // E ci faccio quello che voglio :D
  12. }



E ovviamente la funzione mi riconosce quale delle 64 picturebox ho selezionato!

Grazie :k:

Ultima modifica effettuata da xeeynamo il 18/08/2009 alle 22:22
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 22:23
Martedì, 18/08/2009
Di niente! :k:

PM Quote